上一篇簡述了5個讀取資料的方法,是不是開始迫不及待的想要馬上開始進行Data的操作啦
先別急先別急,在我們開始實際針對DataFrame 進行操作之前, 先來看看幾個基本也很重要的但是卻常常會被忽略的function吧!
顧名思義, 簡單來說就是將你的DataFrame中的資料show出來, 是我認為在處理資料的過程中非常重要的一個function, 一般而言在使用時, 多半只會注意到, 可以順利的把資訊show出來, 但這邊我覺得有幾個非常有意思的parameter可以簡單地幫助你更容易的了解你的資料!
在show()
的function中,default 會是讓你可以顯示20筆的資料, 但你也可以指定顯示的筆數,如下範例
情境說明:
通常我在做操作時,會簡單的overview一下我的data時,會去調整他顯示的筆數多寡
rdd = sc.parallelize([("Carmen", 23, "吉普賽女郎"), ("Don José", 25, "青年衛兵下士"), ("Escamillo", 30, "鬥牛士")])
df = rdd.toDF(["name", "age", "Role"])
df.show(1)
df.show(2)
df.show()
'''
+---------+---+------------+OUTPUT+---------+---+------------+
df.show(1)
+------+----+-----------+
| name| age| Role|
+------+----+-----------+
|Carmen| 23| 吉普賽女郎|
+------+----+-----------+
df.show(2)
+--------+----+-------------+
| name| age| Role|
+--------+----+-------------+
| Carmen| 23| 吉普賽女郎|
|Don José| 25| 青年衛兵下士|
+--------+----+-------------+
df.show()
+---------+----+-------------+
| name| age| Role|
+---------+----+-------------+
| Carmen| 23| 吉普賽女郎|
| Don José| 25| 青年衛兵下士|
|Escamillo| 30| 鬥牛士|
+---------+----+-------------+
+---------+---+------------+OUTPUT+---------+---+------------+
這個truncate,是拿來做什麼的呢?當DataFrame中的row資訊太過豐富,在一般的defualt中,會被截斷,無法顯示出所有內容時,就可以使用這個!
情境說明:
想要顯示每一個row的所有內容,避免被截斷時
rdd = sc.parallelize([("Carmen", 23, "法國巴黎的性感吉普賽女郎","向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋棄的何塞(Don José)手裏"), ("Don José", 25, "皇家專屬青年衛兵下士","倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在愛情方面可不是乖乖女;尤其是當在她對何塞失去興趣後,愛上了別人"), ("Escamillo", 30, "青年才俊之鬥牛士","")])
df = rdd.toDF(["name", "age", "Role","description"])
df.show()
df.show(truncate=50)
df.show(truncate=False)
'''
+---------+---+------------+OUTPUT-1+---------+---+------------+
df.show()
+---------+---+------------------------+-------------------------------------+
| name|age| Role| description|
+---------+---+------------------------+-------------------------------------+
| Carmen| 23|法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風...|
| Don José| 25| 皇家專屬青年衛兵下士|倒霉士兵展開,他受到與作品同名的吉...|
|Escamillo| 30| 青年才俊之鬥牛士| |
+---------+---+------------------------+-------------------------------------+
'''
'''
+---------+---+------------+OUTPUT-2+---------+---+------------+
df.show(truncate=50)
+---------+---+------------------------+-------------------------------------------------------------------------------------------------+
| name|age| Role| description|
+---------+---+------------------------+-------------------------------------------------------------------------------------------------+
| Carmen| 23|法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋...|
| Don José| 25| 皇家專屬青年衛兵下士|倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在...|
|Escamillo| 30| 青年才俊之鬥牛士| |
+---------+---+------------------------+-------------------------------------------------------------------------------------------------+
'''
'''
+---------+---+------------+OUTPUT-3+---------+---+------------+
df.show(truncate=False)
+---------+---+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
|name |age|Role |description |
+---------+---+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
|Carmen |23 |法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋棄的何塞(Don José)手裏 |
|Don José |25 |皇家專屬青年衛兵下士 |倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在愛情方面可不是乖乖女;尤其是當在她對何塞失去興趣後,愛上了別人|
|Escamillo|30 |青年才俊之鬥牛士 | |
+---------+---+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------+---+------------+OUTPUT+---------+---+------------+
df.show()
df.show(truncate=50)
df.show(truncate=False)
情境說明:
通常會推薦於使用來看巢狀結構(nested)的資料,但是在一般資料上的展現其實也有很好的效果
rdd = sc.parallelize([("Carmen", 23, "法國巴黎的性感吉普賽女郎","向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋棄的何塞(Don José)手裏"), ("Don José", 25, "皇家專屬青年衛兵下士","倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在愛情方面可不是乖乖女;尤其是當在她對何塞失去興趣後,愛上了別人"), ("Escamillo", 30, "青年才俊之鬥牛士","")])
df = rdd.toDF(["name", "age", "Role","description"])
df.show()
df.show(vertical=True)
'''
+---------+---+------------+OUTPUT+---------+---+------------+
df.show()
+---------+---+------------------------+-------------------------------------+
| name|age| Role| description|
+---------+---+------------------------+-------------------------------------+
| Carmen| 23|法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風...|
| Don José| 25| 皇家專屬青年衛兵下士|倒霉士兵展開,他受到與作品同名的吉...|
|Escamillo| 30| 青年才俊之鬥牛士| |
+---------+---+------------------------+-------------------------------------+
df.show(vertical=True)
-RECORD 0--------------------------------------------
name | Carmen
age | 23
Role | 法國巴黎的性感吉普賽女郎
description | 向煙草廠外面的大兵們吟唱愛情時的風...
-RECORD 1--------------------------------------------
name | Don José
age | 25
Role | 皇家專屬青年衛兵下士
description | 倒霉士兵展開,他受到與作品同名的吉...
-RECORD 2--------------------------------------------
name | Escamillo
age | 30
Role | 青年才俊之鬥牛士
description |
+---------+---+------------+OUTPUT+---------+---+------------+
'''
df.show(n=3,truncate=50,vertical=True)
'''
-RECORD 0--------------------------------------------------------------------------------------------------------
name | Carmen
age | 23
Role | 法國巴黎的性感吉普賽女郎
description | 向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋...
-RECORD 1--------------------------------------------------------------------------------------------------------
name | Don José
age | 25
Role | 皇家專屬青年衛兵下士
description | 倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在...
-RECORD 2--------------------------------------------------------------------------------------------------------
name | Escamillo
age | 30
Role | 青年才俊之鬥牛士
description |
'''
這個就相對單純一點, 就是將你目前的data structure顯示出來
包含DataType以及有哪些column等等df.printSchema()
root
|-- name: string (nullable = true)
|-- age: long (nullable = true)
|-- Role: string (nullable = true)
|-- description: string (nullable = true)
這個describe()
其實非常的方便,可以透過簡單的語法去幫你統計每個column的基本資訊,包含count
,mean
,stddev
,min
,max
情境說明:
很適合拿來overview 整個DataFrame!
rdd = sc.parallelize([("Carmen", 23,45,"法國巴黎的性感吉普賽女郎"), ("Don José", 25,70, "皇家專屬青年衛兵下士"), ("Escamillo", 30,75, "青年才俊之鬥牛士")])
df = rdd.toDF(["name", "age","weight", "Role"])
df.describe(['name','age','weight','Role']).show()
'''
+---------+---+------------+OUTPUT+---------+---+------------+
+-------+---------+-----------------+------------------+------------------------+
|summary| name| age| weight| Role|
+-------+---------+-----------------+------------------+------------------------+
| count| 3| 3| 3| 3|
| mean| null| 26.0|63.333333333333336| null|
| stddev| null|3.605551275463989|16.072751268321593| null|
| min| Carmen| 23| 45|法國巴黎的性感吉普賽女郎|
| max|Escamillo| 30| 75| 青年才俊之鬥牛士|
+-------+---------+-----------------+------------------+------------------------+
+---------+---+------------+OUTPUT+---------+---+------------+
'''
希望今天的同場加映有幫助到大家更深入了解這些,基本且常用的function秘辛!
如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!
我是 Vivi,一位在雲端掙扎的資料工程師!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】